/**
 * @fileoverview   dom/filter  过滤元素
 * @date: 11-11-4
 * @time: 上午10:33
 * @author 2kid
 * @version 0.001
 */
/**
 *
 * 方法：
 * dom.filter

 *
 */
F.reg('dom/filter', function (f, dom) {
    var win = window, doc = win['document'], docElement = doc.documentElement;

    /**
     * 过滤器
     */
    f.extend(dom, {
        /**
         * @name F.Dom.filter
         * @object
         * @version 0.5
         * @namespace 过滤器核心，可扩展，同选择器。
         * @return {Array}
         * @example
         * 默认提供 :odd,:even
         *
         */
        filter:{

            exec:function (expr, stack) {
                var filparse = this._filparse;
                f.each(filparse, function (filreg, filkey) {
                    if (filreg.test(expr)) {
                        //调用对应过滤函数
                        stack = this._filflter[filkey].call(this, expr, stack, filreg);
                    }
                }, this);
                return stack;
            },
            /***
             *
             * @name F.Dom.filter.add
             * @function
             * @param parse 匹配过滤器正则
             * @param fn(expr, stack, filreg) expr匹配过滤器，stack当前获取到的元素数组，filreg匹配过滤器正则
             * @namespace 扩展过滤器，参数同 F.Dom.select.add
             *
             */
            add:function (parse, fn) {
                this._filparse.push(parse);
                this._filflter.push(fn);
            },
            _filparse:[
                /:odd/,
                /:even/
            ],
            _filflter:[
                function (expr, stack) {
                    return f.filter(stack, function (ele, i) {
                        return i % 2 !== 0;
                    }, this);
                },
                function (expr, stack) {
                    return f.filter(stack, function (ele, i) {
                        return i % 2 === 0;
                    }, this);
                }
            ]

        }
    }, true);

    return dom;
}, {


});